﻿namespace DeltaGroup.WheelOfJeopardy.GameManager
{
    using System;
    using System.Collections.Generic;

    using DeltaGroup.WheelOfJeopardy.Model;
    using DeltaGroup.WheelOfJeopardy.UI.Events;

    public interface INormalRoundUIManager
    {
        #region Events

        /// <summary>
        /// Occurs when [category selected].
        /// </summary>
        event EventHandler<CategorySelectedEventArgs> CategorySelected;

        /// <summary>
        ///   Raised when a contestant has responded to challenge
        /// </summary>
        event EventHandler<ChallengeResponseReceivedEventArgs> ChallengeResponseReceived;

        /// <summary>
        /// Occurs when [not use free turn].
        /// </summary>
        event EventHandler NotUseFreeTurn;

        /// <summary>
        ///   Raised when a contestant has failed to respond within time allowed
        /// </summary>
        event EventHandler ResponseTimerExpired;

        /// <summary>
        ///   Raised when a sector on Wheel has been selected
        /// </summary>
        event EventHandler<SectorSelectedEventArgs> SectorSelected;

        /// <summary>
        /// Occurs when [use free turn].
        /// </summary>
        event EventHandler UseFreeTurn;

        /// <summary>
        /// Occurs when [wager received].
        /// </summary>
        event EventHandler<WagerReceivedEventArgs> WagerReceived;

        #endregion Events

        #region Methods

        /// <summary>
        /// Prompts for free turn usage.
        /// </summary>
        /// <param name="freeTurnCount">The free turn count.</param>
        void PromptForFreeTurnUsage(int freeTurnCount);

        /// <summary>
        ///   Instruct the current contestant to answer
        /// </summary>
        /// <param name = "challenge">the challenge to respond to</param>
        /// <param name = "secondsAllowed">the time in seconds allowed to respond</param>
        void PromptForResponse(Challenge challenge, int secondsAllowed);

        /// <summary>
        /// Prompts for wager.
        /// </summary>
        /// <param name="category">The category.</param>
        /// <param name="maxAllowed">The max allowed.</param>
        void PromptForWager(string category, int maxAllowed);

        /// <summary>
        /// Prompts to select category.
        /// </summary>
        /// <param name="allowedCategories">The allowed categories.</param>
        void PromptToSelectCategory(List<Category> allowedCategories);

        /// <summary>
        ///   Instruct the UI to display Wheel to the current player so he can spin
        /// </summary>
        void PromptToSpin();
        /// <summary>
        /// Shows a message to the contestants
        /// </summary>
        /// <param name="message">message to show</param>
        void ShowMessage(string message);

        #endregion Methods
    }
}